#ifndef FILENAMEVALIDATOR_H
#define FILENAMEVALIDATOR_H

#include <QString>
#include <QSet>

#ifdef Q_OS_WIN
#define CURRENT_OS_WINDOWS
#elif defined(Q_OS_MACOS)
#define CURRENT_OS_MACOS
#elif defined(Q_OS_LINUX)
#define CURRENT_OS_LINUX
#elif defined(Q_OS_UNIX)
#define CURRENT_OS_UNIX
#endif

class FileNameValidator
{
public:
    explicit FileNameValidator();

    // 验证文件名是否有效
    bool isValid(const QString &fileName, QString &errorMessage) const;

    // 清理文件名，返回安全的版本
    QString sanitize(const QString &fileName) const;

    // 获取当前平台的名称
    static QString currentPlatform();

private:
    // 初始化非法字符集合
    void initializeInvalidChars();

    // 平台特定的验证方法
    bool validateWindows(const QString &fileName, QString &errorMessage) const;
    bool validateUnixLike(const QString &fileName, QString &errorMessage) const;
    bool validateMacOS(const QString &fileName, QString &errorMessage) const;

    // 平台特定的清理方法
    QString sanitizeWindows(const QString &fileName) const;
    QString sanitizeUnixLike(const QString &fileName) const;
    QString sanitizeMacOS(const QString &fileName) const;

private:
    QSet<QChar> m_invalidChars;
    QSet<QString> m_reservedNames;
};

#endif // FILENAMEVALIDATOR_H
